#include <sqlite3.h>
#include <stdio.h>
int main()
{   
    sqlite3 *db; //声明一个 SQLite 数据库对象指针
    //打开数据库
    int ret = sqlite3_open("./1.db",&db); //打开一个数据库连接 int ret 是一个整型变量，用于存储 sqlite3_open 函数的返回值
    if(ret != SQLITE_OK)
    {
        printf("open db error : %s\n",sqlite3_errmsg(db));
        return -1;
    }
    printf("打开数据库成功！\n");
    
    // char sql[] = "delete from student where name like '李%';";
    // ret = sqlite3_exec(db,sql,NULL,NULL,NULL); //执行一个 SQL 语句，并将执行的结果保存在 ret 变量中
    // if(ret != SQLITE_OK)
    // {
    //     printf("EXEC db error :%s\n",sqlite3_errmsg(db));
    // }
    
    char sql[] = "select * from student;";
    char* *result; // result 本身是一个指针，指向一个指针数组，而这个指针数组中的每个元素又是一个指针，指向一个字符串。
    int row = 0;
    int column = 0;
    sqlite3_get_table(db,sql,&result,&row,&column,NULL);//db：是一个指向 SQLite 数据库连接对象的指针，表示要执行查询的数据库连接
    if(ret != SQLITE_OK) //是一个字符串，表示要执行的 SQL 查询语句
    {
         printf("get table error :%s\n",sqlite3_errmsg(db));
         sqlite3_close(db);
         return -1;
    }

    for(int i = 1;i <= row; i++) //第一行是列名
    {
        for(int j = 0; j < column; j++)
        {
            printf("%s ",result[i*column + j]);
        }
        printf("\n");
    } 

    sqlite3_free_table(result); //释放内存，避免内存泄漏
    //关闭数据库
    sqlite3_close(db);
    return 0;
}
